package com.剑指offer.第五章;

/**
 * 给定一组范围在00:00至23：59的时间，任意两个时间之间的最小时间差
 * <p>
 * ["23:50","23:59","00:00"]
 * <p>
 * 解题思路
 * 1、双重for循环
 * 2、先排序然后再比较第一个与第二个的大小
 * 3、一天有24小时 即1440分组，可以使用数据表示时间，下标为0 表示00:00 下标为1表示00:01
 */
public class 最小时间差 {

    public static int resolve(String[] word) {
        boolean[] ints = new boolean[1440];
        for (String w : word) {
            String[] split = w.split(":");
            int min = Integer.parseInt(split[0]) * 60 + Integer.parseInt(split[1]);
            if (ints[min]) {
                return 0;
            }
            ints[min] = true;
        }

        int pre = 1;
        int res = Integer.MAX_VALUE;
        int minIndex = Integer.MAX_VALUE, maxIndex = -1;
        // 查找
        for (int i = 0; i < ints.length; i++) {
            if (ints[i]) {
                if (pre > 0) {
                    res = Math.min(res, i - pre);
                }
                pre = i;
                minIndex = Math.min(i, minIndex);
                maxIndex = Math.max(i, maxIndex);

            }
        }
        // 还需要处理 如果是00:00的情况
        res = Math.min(minIndex + ints.length - maxIndex, res);
        return res;
    }

}
